#ifndef _SWAPPER_H_
#define _SWAPPER_H_

#include <vector>
#include <set>
#include <utility>
#include <map>
#include <algorithm>
#include <cmath>
#include <ctime>

#include <boost/random/uniform_real_distribution.hpp>
#include <boost/random/random_number_generator.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/variate_generator.hpp>

#include "../common/polytope.h"
#include "triangulation.h"
#include "polygon_matcher.h"

namespace Packing
{
	class Swapper
	{
	public:
		Swapper(std::vector<Packing_polygon*>& polytopes, Polygon_triangulation& triangulation) ;
		
		void swap();

		void random_shuffle(); 

		void fluctuate_rotation();

	private:
		std::vector<Packing_polygon*>& polygon_set;
		Polygon_triangulation& pt;

		boost::random::mt19937 rand_gen;
	};
}

#endif